import { Action } from './Action';

/**
 * Used to register custom parameter handler in the controller action parameters.
 */
export interface CustomParameterDecorator {
  /**
   * Indicates if this parameter is required or not.
   * If parameter is required and value provided by it is not set then routing-controllers will throw an error.
   */
  required?: boolean;

  /**
   * Factory function that returns value to be written to this parameter.
   * In function it provides you Action object which contains current request, response, context objects.
   * It also provides you original value of this parameter.
   * It can return promise, and if it returns promise then promise will be resolved before calling controller action.
   */
  value: (action: Action, value?: any) => Promise<any> | any;
}
